home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / archives / com / internet / stik / gls002b5.zoo / gsdaemon.c < prev    next >
C/C++ Source or Header  |  1997-09-13  |  2KB  |  103 lines

  1. #include <osbind.h>
  2. #include <mintbind.h>
  3. #include <string.h>
  4. #include <setjmp.h>
  5. #include <unistd.h>
  6. #include <support.h>
  7. #include "patchlev.h"
  8. #include "global.h"
  9. #include "pipe.h"
  10.  
  11.  
  12. long _stksize = 65536L;
  13.  
  14. extern void dispatch __PROTO((void));
  15.  
  16.  
  17. /* in_tfork() -- used in "put-self-in-background" trick.  See below. */
  18. static jmp_buf  tforkj;
  19. static int in_tfork(arg)
  20. int arg;
  21. {
  22.   /* wait for parent to die before we can longjmp back */
  23.   while (getppid () > 1)
  24.     sleep (1);
  25.   longjmp (tforkj, 1);
  26.   /*NOTREACHED*/
  27.   return 0;
  28. }
  29.  
  30.  
  31. /* cleanup() -- free everything we might have alloced, and destroy all
  32.    semaphores we might have created. */
  33. static void cleanup(void)
  34. {
  35.   cleanup_config();
  36.   cleanup_mem();
  37.   cleanup_net();
  38. #ifdef DEBUG
  39.   cleanup_debug();
  40. #endif
  41. }
  42.  
  43.  
  44. int main(void)
  45. {
  46.   Cconws("\r\nGlueSTiK\277 STiK emulator for MiNTnet\r\n"
  47.      "Network interface daemon\r\n"
  48.      "Version " GS_VERSION "\r\n"
  49.      "\275 1996-97 Scott Bigham\r\n");
  50. #ifdef DEBUG
  51.   Cconws("    Trace logging enabled\r\n");
  52. #endif
  53. #ifdef BLOCK_OPEN
  54.   Cconws("    Non-blocking open disabled\r\n");
  55. #endif
  56. #ifdef MULTITHREAD
  57.   Cconws("    Multi-threading option available\r\n");
  58. #endif
  59.  
  60. #ifdef DEBUG
  61.   LOG(Pgetpid(), DBG_TRACE, "Starting GSDaemon v%s", GS_VERSION);
  62. #if 0
  63.   debug("s", "Starting GSDaemon v" GS_VERSION);
  64. #endif
  65. #endif
  66.  
  67.   if (load_config_file() < 0) {
  68.     cleanup();
  69.     return -1;
  70.   }
  71.  
  72. #ifdef DEBUG
  73.   if (!init_debug()) {
  74.     cleanup();
  75.     return -1;
  76.   }
  77. #endif
  78.  
  79.   if (!init_net()) {
  80.     cleanup();
  81.     return -1;
  82.   }
  83.  
  84.   if (!init_mem()) {
  85.     cleanup();
  86.     return -1;
  87.   }
  88.  
  89.   Cconws("\r\n");
  90.  
  91.   /* "put-self-in-background" trick lifted from syslogd */
  92. #if 0    /* when MiNT gets a non-blocking fork(), this will work */
  93.   if (fork())
  94.     exit(0);
  95. #else    /* until then, we use this */
  96.   if (!setjmp(tforkj) && tfork(in_tfork, 0) >= 0)
  97.     _exit (0);
  98. #endif
  99.  
  100.   main_loop();
  101.   return 0;
  102. }
  103.